在 CTF 競賽中,密碼學(Crypto)題目往往不只是靜態的密文分析,許多題目會架設遠端伺服器(常見為 Netcat/NC 連線),要求參賽者在極短時間內回答數十輪數學計算,或是進行動態的 Oracle 攻擊(如 Padding Oracle Attack)。
如果依靠手動輸入,不僅效率低下,更無法處理複雜的大數運算與即時回應。此時,Python 的 pwntools 框架就是解題的終極神器!
pwntools 是專為 CTF 設計的漏洞利用與自動化庫,具備以下核心功能:
在撰寫自動化腳本時,最常用的四大模組如下:
from pwn import *
# 建立 TCP 連線 (IP / Domain, Port)
r = remote('challenge.ctf.org', 1337)
我們來寫一個模擬情境:伺服器會連續發送 5 輪 RSA 或數學挑戰,要求我們解析題目後在 1 秒內回傳答案。
在 WSL 中創建 day22_pwntools_demo.py(此範例模擬建立連線與解析資料流的完整邏輯):
from pwn import *
import hashlib
# 設定 pwntools 日誌等級 (info / debug)
context.log_level = 'info'
def solve_challenge():
log.info("正在連線至遠端挑戰伺服器...")
# 模擬接收伺服器提示訊息 (相當於 r.recvuntil 或 r.recvline)
demo_server_prompt = b"Challenge 1: Calculate MD5 of 'picoCTF_2026'\nInput: "
log.info(f"收到伺服器訊息: {demo_server_prompt.decode().strip()}")
# 自動提取關鍵字並計算解答
raw_data = "picoCTF_2026"
answer = hashlib.md5(raw_data.encode()).hexdigest()
log.success(f"自動計算出解答: {answer}")
# 模擬發送解答至伺服器 (相當於 r.sendline)
log.info(f"已發送解答至伺服器: {answer}")
print("\n[🎯] pwntools 自動化接收與回應測試成功!")
if __name__ == "__main__":
solve_challenge()
在 WSL 終端機執行:
python3 day22_pwntools_demo.py
輸出畫面:
[*] 正在連線至遠端挑戰伺服器...
[*] 收到伺服器訊息: Challenge 1: Calculate MD5 of 'picoCTF_2026'
Input:
[+] 自動計算出解答: 8b178fea5c634b323644982880eb01ab
[*] 已發送解答至伺服器: 8b178fea5c634b323644982880eb01ab
[🎯] pwntools 自動化接收與回應測試成功!

pwntools 是貫穿密碼學與 Pwn 領域的必備基礎。掌握了recvuntil與 sendline 的搭檔使用,未來面對任何 NC 連線型的動態密碼學挑戰(例如:RSA 密碼學問答、Padding Oracle 爆破、流密碼金鑰重用攻擊),都能輕鬆寫出自動化腳本一鍵抓取 Flag!